﻿%comment
%Qui metterò un pò di comandi che possonoe essere utili da ricordare

% \\ : forza ad andare a capo
\documentclass[titlepage]{article}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\usepackage{etoolbox, mathptmx, anyfontsize, t1enc, graphicx}
\usepackage{titlesec, hyperref, ltablex, array}
\usepackage[margin=1.25in]{geometry}
\usepackage{float}
\usepackage{lscape}

\definecolor{light-gray}{HTML}{EEF2F7}
\definecolor{light-blue}{HTML}{C5D3FF}
\definecolor{mauve}{HTML}{E0B0FF}

%code highlight e import
\usepackage{verbatim, listings}

% Packages per i sequence diagrams
\usepackage{tikz, tikz-uml}
\usepackage{pgf-umlsd}
\usepgflibrary{arrows}
\usetikzlibrary{arrows,shadows}

\makeatletter
\patchcmd{\@maketitle}{\Huge}{\huge}{}{}
\makeatother

\hypersetup{
	colorlinks,
	citecolor = black,
	filecolor = black,
	linkcolor = blue,
	urlcolor = red
}

\hyphenation{ac-cor-da-re ma-nie-ra u-ni-vo-ca do-cu-men-to svi-lup-po
cal-co-la-ta sot-tra-en-do i-nat-ti-vi-tà men-si-le ser-vi-zio ap-pli-ca-ti-vo
pre-e-sis-ten-te ri-guar-do ap-pli-ca-zio-ne sup-por-to hard-ware di-vi-so
mi-nu-ti}

%Profondità degli indici di numerazione delle sezioni
\setcounter{secnumdepth}{4}

%Definizione dello stile del linguaggio Alloy
\lstdefinelanguage{alloy}
{
	morekeywords={abstract,all,and,as,assert,disj,else,extends,fact,fun,iden,if,iff,
				implies,in,Int,int,let,lone,module,no,none,not,one,open,or,part,pred,
				set,sig,some,sum,then,univ,but,check,exactly,expect,for,run,=>,<=,&&,||},
	morecomment=[l]{//},
	morecomment=[l]--,
	morecomment=[s]{/*}{*/},
	basicstyle=\footnotesize,
	keywordstyle=\color{blue},
	commentstyle=\color{green},
	stringstyle=\color{mauve},
	morestring=[b]",
	sensitive=true,
	keepspaces=true,
	numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
	numbersep=5pt,
	showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
	showstringspaces=false,          % underline spaces within strings only
	showtabs=false,                  % show tabs within strings adding particular underscores
	stepnumber=1,                    % the step between two line-numbers. If it's 1, each line will be numbered
	tabsize=4,                       % sets default tabsize to 4 spaces
	breaklines=true,
	caption=\lstname
}

%Cambia lo stile del titolo del paragrafo
\titleformat{\paragraph}
{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
\titlespacing*{\paragraph}
{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}

\title{
	\includegraphics[scale=0.13]{PoliMI.png}\centering\\
	\fontsize{50}{60}\selectfont Travel Dream\\
	\fontsize{20}{30}\selectfont Progetto di Ingegneria del Software 2\\
	\fontsize{30}{40}\selectfont RASD}
\author{
	A. Rigamonti\\
	E. Tironi\\
	F. Zoffoli}
\date{}

\begin{document}
\def\arraystretch{1.2}
\maketitle
\tableofcontents
\newpage

\section{Introduzione}\label{introduzione}

\subsection{Scopo del Documento}
Lo scopo di questo documento è di accordare in maniera univoca le parti
interessate dallo sviluppo dell'applicativo richiesto dallagenzia TravelDream.
Il suddetto documento tratterà delle funzionalità e delle modalità in cui
verranno messe in pratica dal software che verrà prodotto. Verranno anche
specificate le condizioni al contorno, come le premesse necessarie per utilizzare il programma e le garanzie che esso provvede.
Diversi esempi di utilizzo di esso verranno trovate nelle successive sezioni.
I maggiori beneficiari di questo documento sono: i committenti (non limitati a persone fisiche), il team di sviluppo ed il team di testing.


\subsection{Obiettivo Generale}
L'agenzia TravelDream vuole migliorare sia dal lato di efficienza che di
semplicità la gestione dell'offerta per i propri clienti.
Lo scopo del contratto è di fornire un software che possa operare su diversi
ambiti.
Uno è quello di assistere i dipendenti nella creazione delle varie offerte,
con la possibilita in futuro di ampliare la gamma di prodotti trattati.
Il secondo è quello di permettere ai clienti una facile e chiara navigazione tra
le proposte dell'agenzia TravelDream, li accompagni nella personalizzazione e nella condivisione, fino all'acquisto.
Non è previsto supporto ad alcuna operazione che avvenga successivamente
all'acquisto e alla modifica del prodotto.

\subsection{Definizioni}
\begin{itemize}
\item applicazione: invece che applicazione mettere il nome con cui ci si riferirà ogni volta al programma che stiamo sviluppando
\item pacchetto:
\item prodotto base: viaggio/hotel/etc..
\item Gift-List: lista desideri nella quale gli utenti registrati aggiungono prodotti o pacchetti che vorrebbero acquistare in attesa che altri utenti li comprino per loro.
//aggiungere le cose man mano che scriviamo
\end{itemize}

\subsection{Riferimenti}
\begin{itemize}
  \item IEEE Std 830-1998, IEEE Recommended Practice for Software Requirements
  Specifications, \\
  \url{http://standards.ieee.org/findstds/standard/830-1998.html}
  \item IEEE Systems and software engineering -- Life cycle processes
  --Requirements engineering
\end{itemize}

\subsection{Struttura}
Nella sezione \ref{introduzione} viengono date informazioni generali riguardo a
questo documento, al suo utilizzo e  scopo.\\
Nella sezione \ref{descrizioneDelProdotto} si prosegue specificando in maniera
sempre comprensibile anche ai non addetti allo sviluppo le funzionalità che
l'applicativo metterà a disposizione degli stackholders, aggiungendo inoltre i
requisti richiesti all'hardware che si occuperà di fare girare sia la parte
server che la parte client. Vengono anceh illustrati alcuni principi che
verranno seguiti durante la fase di sviluppo.\\
Infine, nella sezione \ref{RequisitiSpecifici} si mostrano nel dettaglio le
scelte e le modalità con le quali le funzioni saranno da svolgere

\newpage
\section{Descrizione del Prodotto}\label{descrizioneDelProdotto}

\subsection{Situazione Ereditata}
Poichè l'agenzia TravelDream è nuova non è presente un sistema informatico
preesistente a disposizione degli impiegati e dei clienti.La mancanza di un software precendetemente esistente che possa essere di
riferimento per le modalità in cui verranno espletate le funzioni dai clienti e
dagli impiegati viene compensato dalla libertà di affrontare i problemi nel modo
più consono secondo il team di sviluppo e le richieste del committente, senza
paura di vanificare l'esperienza precedentemente acquistita dagli utilizzatori del software e/o creare una rottura con le abitudini precedenti (problema di backward compatibility).

\subsection{Stakeholders}
I principali soggetti che maggiormente richiedono un buon funzionamento del sistema e un utilizzo intelliggibile sono:
\begin{itemize}
	\item \textbf{Utente registrato}: interessato ad un servizio pratico da utilizzare,
	 con una buona visualizzazione di tutte le offerte proposte dall’azienda, la scelta
	  e la successiva selezione del pacchetto dev’essere intuitivo e lineare
	  (senza pop-up, ricariche di pagine o altri allert), in modo che la preferenza
	   venga subito messa a disposizione per la modifica o la prenotazione.
	    Il pacchetto dev’essere modificabile prevenendo eventuali sovrapposizioni di
	     date e segnalando le disponibilità dei singoli prodotti. L’utente si aspetta
	      inoltre che al momento della prenotazione l’elenco dei dati da inserire sia
	       chiaro ed evidenzi i dati obbligatori da inserire, inoltre i termini e condizioni
	        devono essere riportati in maniera leggibile. Deve essere richiesta la conferma
	         dell’interessato per le modifiche dei dati personali, dei prodotti e dei pacchetti
	          per prevenire cambiamenti accidentali. Il sistema deve anche rispettare la privacy
	           dell’attore considerato, non mostrando pubblicamente i dati di chi si affida all’applicazione.
	\item \textbf{Utente Invitato}: è un potenziale cliente o un utente già registrato al quale viene inviato
	 un invito di partecipazione ad un pacchetto o a un prodotto tramite email segnalata dall’invitante.
	  L’invito deve contenere il nome del mittente e deve illustrare tutte le caratteristiche del pacchetto
	   contenendo le principali informazioni dei vari prodotti, includendovi anche i link, per far in
	    modo che l’utente destinatario dell’invito possa decidere se parteciparvi o meno. In caso l’utente
	     destinatario decida di accettare l’invito ma non è cliente dell’agenzia potrà trovare nella
	      mail che gli è stata recapitata il link dal quale, oltre a poter vedere i dettagli del pacchetto
	       come specificato, si potrà anche registrare con un form nel quale dovrà inserire i suoi dati
	        per poter procedere con l’accettazione dell’inivito.
	\item \textbf{Impiegato dell'agenzia}: interessati alla gestione dei prodotti da loro venduti che deve
	 esporre i comandi utilizzati più di frequente e non deve interrompere il flusso di lavoro con messaggi
	  e allert non necessari. I comandi più comuni sono quelli di inserimento, rimozione(richiede allert)
	   e modifica dei dati. I pacchetti da creare devono essere congruenti con le politiche aziendali e
	    di viaggio, sempre a disposizione per eventuali modifiche e applicabili in qualsiasi momento.
\end{itemize}

\subsection{Sistema proposto}
Lo scopo dell'applicativo di gestione che l'azienda TravelDream ha richiesto è
automatizzare il processo di scelta e prenotazione del viaggio da parte degli utenti, i quali potranno tramite un web browser scegliere i pacchetti
preparati precedentemente dagli impiegati TravelDream, e sempre tramite un web browser potranno permettere ai propri
amici di modificare e interagire con le scelte da loro fatte.
I dipendenti dovranno essere in grado di creare ed eliminare nuovi pacchetti.
Deve anche essere data loro la possibilità di modificarli,
aggiungendo\slash modificando\slash rimuovendo prodotti base.

\subsubsection{Interfacce Software e Requisiti Server}
Gli altri prodotti software richiesti per il supporto dell’applicazione
da parte dell'hardware che agirà da server sono:
\begin{itemize}
	\item DBMS( Database Management System):
 	\begin{itemize}
		\item[] Name: MySQL
		\item[] Mnemonic: MySQL
		\item[] Specification number:
		\item[] Version number: 5.6.14
		\item[] Source: \url{http://dev.mysql.com/downloads/mysql/}
	\end{itemize}
	\item Application Server:
	\begin{itemize}
		\item[] Name: GlassFish
		\item[] Mnemonic: GlassFish
		\item[] Specification number: Open source edition
		\item[] Version number:4.0
		\item[] Source: \url{https://glassfish.java.net/download.html}
	\end{itemize}
	\item Operating System:
	\begin{itemize}
		\item[] Non è necessario un particolare sistema operativo ma deve poter
		supportare il DBMS MySQL, l’application server GlassFish, descritti precedentemente, e la Java Virtual Machine.
	\end{itemize}
\end{itemize}

\subsubsection{Interfacce Software e Requisiti Client}\label{requisitiClient}
Mentre non è richiesto uno specifico sistema operativo, è necessario che sia disponibile un web browser con supporto HTML\slash XHTML 4.0, CSS 3, JavaScript
1.8.5, una stabile (latenze < 2000 ms e packet loss < 2\%) connessione a internet.

\subsubsection{Interfacce di Comunicazione}
Le comunicazioni avvengono su protocollo TCP/IP per
\begin{itemize}
  \item Lo scambio di informazioni tra client e server
  \item Lo scambio di informazioni tra il server e un server mail esterno
\end{itemize}

\subsection{Funzioni del Prodotto}
\subsubsection{Requisiti Funzionali}
Gli attori del sistema individuati si basano sulle diverse credenziali di accesso al sistema, ognuno di loro ha diversi requisiti che verranno descritti di seguito:
\begin{itemize}
	\item \textbf{Impiegato dell'azienda}:
		\begin{itemize}
			\item Gestione dei Prodotti
				\begin{itemize}
					\item Inserimento di un nuovo prodotto (volo, hotel o
					escursione)
					\item Modifica dei prodotti già aggiunti (modifica
					dei dati utilizzati per il calcolo del prezzo e\slash o utilizzati per la
					visualizzazione dell'offerta)
					\item Rimozione dei prodotti già aggiunti
				\end{itemize}
			\item Gestione dei pacchetti
				\begin{itemize}
					\item Creazione di nuovi pacchetti (inizialmente vuoti)
					\item Modifica dei pacchetti: aggiunta dei prodotti
						dalla lista di quelli aggiunti attraverso la gestione dei prodotti
					\item Modifica dei pacchetti: rimozione dei prodotti
						già aggiunti al pacchetto
				\end{itemize}
			\item Gestione delle prenotazioni: visualizzazione delle prenotazioni
			\item Gestione degli utenti registrati: visualizzazione utenti registrati, visualizzazione dei loro dati e lista deigli amici invitati
		\end{itemize}
	\item \textbf{Utente registrato}:
		\begin{itemize}
			\item Visualizzazione di tutti i pacchetti proposti
			\item Visualizzazione di tutti i dettagli di un singolo pacchetto
			\item Gestione pacchetti
				\begin{itemize}
					\item Personalizzazione pacchetto: immissione delle date
					del viaggio e durata dello stesso
					\item Personalizzazione pacchetto: aggiunta e rimozione
					dei prodotti riguardo una configurazione di pacchetto
					\item Personalizzazione pacchetto: prenotazione di un
					pacchetto personalizzato
					\item Modifica della data di viaggio o della durata dello
					stesso.
				\end{itemize}
			\item Invio pacchetto: invio del link ad un pacchetto ad un amico inserendo
			la sua mail.
			\item Prenotazione del pacchetto
			\item Visualzzazione delle prenotazioni effettuate
			\item Gestione della Gift-List: aggiunta
				\begin{itemize}
				  \item aggiunta degli prodotti nella lista dei desideri
				  \item rimozione degli prodotti dalla lista desideri
				  \item modifica dei dati dei prodotti nella lista dei desideri
				\end{itemize}
		\end{itemize}
	\item \textbf{Utente non registrato}:
		\begin{itemize}
			\item Registrazione al sito: inserendo i dati personali.
			\item Visualizzazione dell'eventuale pacchetto inviato dall’utente registrato.
		\end{itemize}
\end{itemize}

\subsubsection{Requisiti non Funzionali}
\paragraph{Interfaccia Utente}
Il design che detta le scelte da fare a livello di interfaccia è quello di interrompere il meno possibile il flusso di lavoro.
 Per ottenere questo effetto si limiteranno al massimo le sovrapposizioni di finestre, lasciando tutte le informazioni
  necessarie sempre visibili nelle pagine, sia dei clienti che degli impiegati, si utilizzeranno messaggi
   a pop-up solo per segnalare operazioni irreversibili (come per esempio la rimozione di qualcosa.
    L’aggiunta invece non ha bisogno di questo tipo di trattamento, perchè può sempre essere rimossa).
     Le finestre che richiedono il focus e impediscono di passare il focus ad altre finestre sottostanti sono,
      nei limiti tecnologici possibili, da evitare.
Le pagine verranno realizzate tenendo conto delle necessità di chi andrà ad utilizzarle:
 per il cliente bisognerà concentrarsi sulla chiarezza della navigazione, senza mostrare informazioni
  che non siano strettamente correlate con essa. Per gli impiegati invece l’accessibilità degli
   strumenti per la gestione dei prodotti sarà la priorità.

\subsection{Vincoli}
\subsubsection{Sicurezza}
L’accesso all’applicazione da parte dei dipendenti e dei clienti viene eseguito inserendo username e password,
 della quale verrà salvato solo l’hash ottenuto con gli standard attuali (MD5). Nelle versioni successive,
  se si saranno verificati problemi di sicurezza, dovrà essere possibile implementare una connessione sicura usando il protocollo SSH.
   Dovrà essere possibile utilizzare lo standard SSL/TLS per visualizzare le pagine in HTTPS.

\subsubsection{Portabilità}
Poiché l’uso dell’applicazione avviene tramite un web browser, essa può essere utilizzata da qualsiasi terminale
 connesso a internet che soddisfi i requisiti dichiarati nella sottosezione
 \ref{requisitiClient}

\subsubsection{Mantenimento}
Poichè si interagisce con il sistema tramite pagine web, non è necessario fare manutenzione a codice salvato sulla macchina dell’utilizzatore:
 non sarà mai necessario fare aggiornamenti dell’applicazione lato utente. Il tempo durante il quale l’applicazione non sarà disponibile
  per l’utilizzo a causa gli aggiornamenti del software sul server sono inclusi
  nei dati della sottosezione \ref{disponibilità}

\subsubsection{Disponibilità}\label{disponibilità}
La disponibilità mensile dell’applicazione viene calcolata sottraendo a 1 il tempo di inattività del servizio,
 diviso per i minuti massimi di disponibilità relativi a un mese.\\
\[
\makebox{Disponibilità mensile} =  1- \frac{\makebox{tempo di
inattività}}{\makebox{minuti massimi di disponibilità}}
\]

La disponibilità dell’applicazione deve essere <95%

\newpage

\section{Requisiti Specifici}\label{RequisitiSpecifici}

\subsection{Requisiti funzionali}

\subsubsection{Scenari}
\paragraph{Utente registrato}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Aggiunta ed eliminazione di un pacchetto dal carrello. \\
\hline
Goal &
			L’utente deve aggiungere un pacchetto al carrello e, successivamente,
			decide di eliminarlo prima di aver confermato e pagato. \\
\hline
Attori partecipanti &
			C. Colombo: utente registrato. \\
\hline
Condizione iniziale &
			Il signor Colombo ha deciso di fare un viaggio.\\
\hline
Eventi &
			Il signor Colombo ha deciso di fare un viaggio dopo aver ricevuto una
			sostanziosa somma di denaro da Isabella. Una volta effettuato l’accesso 
			entra nella pagina dei pacchetti viaggio, facendo scorrere le proposte vede
			un viaggio molto interessante per l’India con partenza ad agosto, lo 
			seleziona per vedere nel dettaglio gli areoporti di partenza e arrivo
			(sia per l’andata che per il ritorno), le date, gli orari e i prezzi.
			Il signor Colombo aggiunge il pacchetto viaggio dopo aver modificato il volo 
			e la classe nel quale viaggiare. Cristoforo, che all’India ha sempre 
			preferito l’America, al momento del pagamento dei pacchetti contenuti nel
			carrello, cambia idea e seleziona il carrello per cancellare il pacchetto
			per l’India personalizzato poco prima. Infine nell’indecisione delle scelte
			viaggio clicca sul tasto di Logoff per uscire dal sito. \\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Modifica e prenotazione di un pacchetto.\\
\hline
Goal &
			L’utente deve scegliere un pacchetto e modificarlo a suo piacimento, infine
			lo deve confermare e pagare. \\
\hline
Attori partecipanti &
			Marco Polo: utente registrato. \\
\hline
Condizione iniziale &
			Il signor Marco, sta sfogliando i pacchetti viaggio disponibili e decide
			di prenotarne uno. \\
\hline
Eventi &
			Marco si trova nella pagina dei pacchetti viaggio quando ne vede uno per la
			Cina e, essendo questo un Paese che ha sempre desiderato visitare, lo seleziona
			per vedere nel dettaglio cosa comprende. Il signor Polo legge che nel pacchetto
			sono incusi i viaggi di andata e ritorno in aereo, una prenotazione in un albergo
			di Pechino per due settimane e un tour guidato per la città. Essendo un tipo
			avventuroso decide di modificare il pacchetto selezionando il bottone “Modifica pacchetto”, viene così abilitata la modifica dei dati relativi ad albergo, volo e tour.
			Estende il periodo dell’alloggio in albergo prolungandone la
			permanenza per avere più tempo per visitare la città. A questo punto il signor Marco,
			contento del risultato ottenuto, aggiunge il pacchetto al carrello per poi procedere con la prenotazione e il pagamento. Non avendo altre operazioni da effettuare esegue il Logoff dalla pagina.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Selezione di un pacchetto in corso di modifica.\\
\hline
Goal &
			L’utente deve essere notificato nel momento in cui insersce nel carrello un
			pacchetto che un impiegato sta per modificare.\\
\hline
Attori partecipanti &
			\shortstack{Ferdinando Magellano: utente registrato,\\
			Amerigo Vespucci: impiegato dell’agenzia.}\\
\hline
Condizione iniziale &
			Il sig. Magellano è loggato e sta sfogliando i pacchetti viaggio.
			Il sig. Vespucci è loggato nel sistema di gestione dei pacchetti. \\
\hline
Eventi &
			Il sing. Ferdinando, visualizzando i pacchetti di viaggio, ne trova uno di
			suo interesse che riguarda un viaggio comprendente un’escursione
			pre-organizzata che costeggia la Grande barriera corallina in Australia a
			bordo della HMS Endeavour; così lo seleziona per visualizzarne il dettagli.
			Mentre Ferdinando consulta i dati del pacchetto, Amerigo, impiegato
			dell’azienda TravelDream, modifica la durata dell’escursione dello stesso pacchetto. Il signor. Ferdinando Magellano, nel frattempo
			è sempre più convinto della scelta del viaggio e si appresta ad aggiungere il paccetto al carrello.
			Tornato alla visualizzazione dei pacchetti si accorge della modifica
			effettuata dall'impiegato e visualizzando i dettagli si accorge che la
			modifica è molto più vicina alle sue esigenze: decide così di eliminare il
			pacchetto appena aggiunto al carrello e di inserire quello appena
			visualizzato, per poi procedere alla prenotazione.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Segnalazione pacchetto ad amici.\\
\hline
Goal &
			L'utente vole segnalare a qualche conoscente, tramite mail, la presenza di
			un pacchetto di suo interesse.\\
\hline
Attori partecipanti &
			Signora Morena: utente registrato.\\
\hline
Condizione iniziale &
			La signora Morena aveva precedentemente trovato un pacchetto di suo
			interesse navigando sul sito, ma non avendo tempo di guardarlo nel
			dettaglio si era ripromessa di farlo in futuro. Ora è il momento.\\
\hline
Eventi &
			La signora Morena si è appena loggata al sito per verificare se il pacchetto, che comprendeva
			un viaggio a Parigi, è ancora disponibile per fare un viaggio romantico	con il suo partner.
			Non molto abile con le ricerche non utilizza il filtro messo a disposizione
			ma decide di sfogliare tutti i pacchetti ordinandoli per caricamenti recenti.
			Mentre fa scorrere i pacchetti la signora Morena trova il pacchetto “Zumba
			con noi” per un viaggio all’insegna del movimento in Colombia, alla visione
			pensa subito alle sue amiche Elena e Angelica che amano questa danza ritmica.
			Quindi seleziona il pacchetto e vedendo che il viaggio comprendeva delle lezioni
			con i ballerini più bravi della città decide subito di aggiungere il pacchetto al carrello e di segnalarlo alle amiche, quindi clicca sul tasto aggiungi a carrello e accedendo al carrelo 
			clicca sul tasto “Suggerisci ad amico”, così alla comparsa della form
			inserisce gli indirizzi mail di Elena e Angelica e decide di allegarle un messaggio
			che gli fa capire che il viaggio sembra fatto apposta per loro tre. Alla conferma dell’invio
			della mail Morena ritorna alla home page per la ricerca del suo viaggio romantico in attesa della risposta delle amiche.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Aggiunta di un elemento in Gift List.\\
\hline
Goal &
			L'utente trova un pacchetto o un elemento che gli interessa e
			lo aggiunge alla sua Gift List personale.\\
\hline
Attori partecipanti &
			Ramona: utente registrato.\\
\hline
Condizione iniziale &
			Ramona è già loggata all'interno del sito.\\
\hline
Eventi &
			Ramona ha la passione per lo shopping e, stanca degli ordini fatti online,
			vorrebbe fare un viaggio nella Grande Mela per aggiornare il suo guardaroba.
			Presa dall’entusiasmo decide di accedere al sito e poiché le credenziali
			d’accesso erano già state inserite viene visualizzata direttamente la home
			page. Visto che l’obiettivo è ben preciso utilizza il filtro per città per
			cercare i pacchetti disponibili con destinazione New York. Alla conferma del
			filtro vengono visualizzati i pacchetti disponibili. I primi mostrati
			hanno un prezzo decisamente al di fuori del suo budget, così decide di selezionare
			l’opzione ordina per prezzo decrescente. Trovato il pacchetto interessato ad un prezzo
			accessibile nota che la compagnia aerea con cui è previsto il viaggio è la
			stessa con cui ha avuto una bruttissima esperienza in un viaggio precedente
			e si era ripromessa di non prendere mai più.
			Sceglie quindi di modificare il pacchetto, e di cambiare la compagnia aerea
			con cui fare il viaggio. Questo però fa superare il suo limite di budget,
			per cui decide di mettere la modifica della compagnia nella Gift List,
			sperando che, avvicinandosi le feste, qualcuno possa aiutarla a fare il
			viaggio dei suoi sogni pagandole il volo.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Regalo di una componente in Gift List.\\
\hline
Goal &
			L'utente interessato naviga tra i pacchetti nella Gift List di un altro
			utente e ne acquista uno.\\
\hline
Attori partecipanti &
			\shortstack{Patrizia: utente registrato,\\
					Gabriele: utente registrato.}\\
\hline
Condizione iniziale &
			Gabriele, già precedentemente registrato, ha messo alcuni pacchetti viaggio
			nella sua gift list.\\
\hline
Eventi &
			Patrizia, per il diciottesimo compleanno di suo nipote Gabriele, decide di
			regalargli un viaggio che possa ricordare per tutta la vita. Non conoscendo
			molto i gusti della nuova generazione decide di guardare nella giftlist del
			nipote, accede alla pagina personale di Gabriele dove sono visualizzate le
			richieste di regalo. Visto la sua dote da educatrice, Patrizia decide di
			scartare il viaggio ad Amsterdam tanto desiderato dal figlioccio, così decide
			per un viaggio a Londra. LA richiesta del nipote comprende un tour dei pub storici della città e il volo.
			Seleziona entrambi i prodotti segnalati e conferma la prenotazione per il nipote.
			Gabriele riceverà la mail per avvenuta prenotazione sia del tour che del volo per il pacchetto della giftlist
			da parte di sua zia Patrizia.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Gestione della Gift List.\\
\hline
Goal &
			Eliminare un pacchetto dalla Gift List.\\
\hline
Attori partecipanti &
			Agnese: utente registrato.\\
\hline
Condizione iniziale &
			Agnese ha svariati pacchetti nella gift list ed è già loggata sul sito.\\
\hline
Eventi &
			Agnese è un’accanita viaggiatrice ma, per la poca disponibilità economica, ha
			all’interno della sua giftlist molte richiesta di prodotti per pacchetti viaggio che ha
			sempre desiderato nella speranza che i suoi amici realizzassero i suoi
			desideri. Da poco però ha ricevuto una proposta di matrimonio e per il
			viaggio di nozze il suo partner ha deciso di regalarle un tour per gli Stati
			Uniti. Così decide di eliminare tutti i pacchetti che hanno come destinazione
			gli USA. Accede dunque alla sua pagina personale e, cliccando sul bottone
			“giftlist”, visualizza tutti i pacchetti con richiesta di regalo prodotto aggiunti	 in precedenza.
			Utilizzando l’apposito filtro imposta come stato di destinazione “USA”,
			trovando 3 viaggi. Decide di eliminare per primo Los Angeles poichè è
			già la prima tappa della luna di miele: seleziona il pacchetto per
			visualizzarne i dettagli e successivamente clicca sul tasto elimina, che farà
			comparire un messaggio per confermare la cancellazione. Agnese clicca su “ok”
			per confermare e viene reindirizzata sulla lista dei pacchetti
			desiderati, nella quale non è più presente il pacchetto eliminato in
			precedenza.\\
\hline
\end{tabularx}

\vspace*{1 cm}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% 	IMPIEGATO AZIENDA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paragraph{Impiegato dell'azienda}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Creazione di un pacchetto.\\
\hline
Goal &
			L’impiegato aggiunge un pacchetto, senza però completarlo, e lo salva senza
			pubblicarlo.\\
\hline
Attori partecipanti &
			A. Brighi: impiegato dell'azienda.\\
\hline
Condizione iniziale &
			Viene segnalata al sig. Brighi la nuova partnership con l’hotel
			GranStanza, e gli viene chiesto di aggiungere un pacchetto che lo includa.
			Un collega ha precedentemente già aggiunto l’hotel ai prodotti che
			gestisce l’azienda. \\
\hline
Eventi &
			Al signor Brighi, appena arrivato al lavoro, viene segnalato dal suo
			superiore Oreste che un nuovo pacchetto per un viaggio d’avventura dev’essere aggiunto.
			Così accede alla sua postazione di lavoro ed entra nell’applicazione eseguendo il login
			con le sue credenziali con privilegi da impiegato. Per provvedere alla creazione di un
			nuovo pacchetto seleziona il link corrispondente alla loro gestione. Brighi clicca il
			bottone corrispondente all’inserimento di un nuovo pacchetto e viene indirizzato alla
			pagina per la creazione dei pacchetti. In essa inserisce nei campi appositi il nome
			“FF-Fiordi Freddi”, una breve descrizione che comparirà nella visualizzazione
			nell’interfaccia iniziale lato user e la destinazione nel suo caso Oslo. AL completamento seleziona il tasto hotel che visualizzerà tutti gli hotel disponibili, utilizzando l'apposito filtro seleziona l'hotel “GranStanza” presso Oslo e nella form messa a disposizione la data di checkin, quella di checkout e il numero di persone.
			Con lo stesso procedimento il signor Brighi inserisce anche
			un volo che permette all’avventuriero di raggiungere l’hotel, la data di partenza del
			volo sarà corrispondente al primo giorno di prenotazione dell’albergo, ma quella di
			ritorno sarà più tardi di quella di lascio dell’hotel poichè il viaggio comprende
			un escursione di 3 giorni attraverso i Fiordi Norvegesi. Alla fine della scelta
			dei prodotti il signor Brighi conferma l’operazione ma accorgendosi che non è
			stata spuntata la casella di pubblicazione compare un messaggio che segnala
			che il pacchetto è stato creato ma non è ancora visibile ai clienti. Questo
			messaggio può essere solo confermato e così facendo il signor Brighi viene
			reindirizzato sulla propria pagina di gestione pacchetti. Per correggere
			la svista, seleziona il pacchetto “FF-Fiordi Freddi ”, compie le operazioni per
			iniziare la modifica e, invece di modificare i dati del pacchetto, subito clicca
			sul tasto per salvare le modifiche, ricordandosi prima di spuntare la casella di
			pubblicazione. Alla conferma il pacchetto è stato selezionato ed è visibile al
			pubblico come il signor Oreste aveva ordinato.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Modifica di un pacchetto offline.\\
\hline
Goal &
			L’impiegato viene notificato quando tenta di modificare un pacchetto mentre
			un collega vi sta lavorando.\\
\hline
Attori partecipanti &
			\shortstack{E. Vati: impiegato azienda,\\
					T. Ricci: impiegato azienda.} \\
\hline
Condizione iniziale &
			I signori Vati e Ricci si accorgono di un errore in un pacchetto, e
			vogliono correggerlo. \\
\hline
Eventi &
			Il signor Vati sta lavorando all’agenzia ed è collegato all’applicazione per la gestione
			dei pacchetti vacanze. Navigando tra i pacchetti nota una stranezza: il “Viaggio Stupefacente”,
			un nuovo elemento che sta per essere messo online a disposizione dei clienti, ha la prenotazione
			dell’hotel che scade un giorno prima rispetto a quello della partenza, lasciando di fatto un
			giorno scoperto. Il pacchetto in questione non è ancora pubblicato, quindi il sig. Vati si appresta
			a correggerlo prima che i clienti possano visualizzarlo. Casualmente però, nello stesso momento,
			anche il sig. Ricci nota qualcosa di strano nello stesso pacchetto: nella descrizione infatti
			non vi è segnalata la presenza di barriere architettoniche all’interno dell’hotel proposto,
			quindi decide anch’egli di correggere gli errori ma, nel momento in cui clicca sul bottone di
			modifica, viene notificato del fatto che il pacchetto corrente è in stato di revisione e viene
			reindirizzato alla pagina di gestione dei pacchetti.
			Una volta terminata la sua correzione, Vati salva le modifiche ed esce, e a
			questo punto il signor Ricci può tornare a visualizzare
			il pacchetto per modificare l’imprecisione notata da lui precedentemente.
			\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Pubblicazione di un pacchetto.\\
\hline
Goal &
			L’impiegato completa un pacchetto e lo pubblica.\\
\hline
Attori partecipanti &
			C. Azzoni : impiegato dell'azienda.\\
\hline
Condizione iniziale &
			C. Azzoni, presidente dell’azienda, ha l’abitudine di controllare i piani
			che vengono pubblicati per la prima volta. Dopo aver chiesto a uno dei suoi
			dipendenti di crearne uno specifico, ha finalmente il tempo di controllarlo.\\
\hline
Eventi &
			Il signor C. Azzoni è il presidente dell’azienda e come ogni mattina controlla i pacchetti pubblicati
			recentemente dai suoi impiegat. Accede al sito con le sue credenziali, che corrispondono a quelle di
			un impiegato, carica la pagina per la gestione dei pacchetti e applica il filtro per la visualizzazione
			in ordine di ultima modifica. Trovato il pacchetto di interesse, apre la pagina per visualizzarlo e inizia
			a controllare che tutto sia secondo i suoi desideri. Una volta appurato che il pacchetto è corretto, apre
			la pagina di modifica, e spunta la casella per la pubblicazione di fianco al tasto per confermare le modifiche.
			Quindi salva le modifiche. Poichè il piano è stato reso pubblico e accessibile dai clienti, viene mostrato
			un messaggio di conferma che segnala che il pacchetto è ora visibile.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Rimozione pacchetto.\\
\hline
Goal &
			L’impiegato deve rimuovere un pacchetto da quelli a disposizione degli
			utenti.\\
\hline
Attori partecipanti &
			T. Ricci: impiegato dell'azienda.\\
\hline
Condizione iniziale &
			Il pacchetto “Mari e Monti” ultimamente sta risquotendo pochissimo
			successo, inoltre l’azienda ha deciso di creare un nuovo pacchetto che è
			sostitutivo a “Mari e Monti”.\\
\hline
Eventi &
			Il signor Ricci, già loggato poichè a lavoro da diverso tempo, accede alla
			pagina di gestione pacchetti per rimuovere il pacchetto “Mari e Monti”. Per farlo, lo seleziona
			dall’elenco dei pacchetti e clicca sul tasto di modifica. Toglie la spunta alla voce per la
			pubblicazione e clicca per salvare le modifiche, in quanto non è possibile eliminare un pacchetto
			che è pubblicato. Essendo questa una operazione estremamente sensibile, viene mostrato un messaggio
			di attenzione per segnalare che si sta rendendo impossibile per i clienti selezionare il suddetto
			pacchetto. Ora che il pacchetto è stato messo offline, il signor Ricci accede nuovamente alla pagina
			di modifica, e clicca sul pulsante per la rimozione del pacchetto: esce un messaggio di conferma.
			Il signor Ricci conferma; viene quindi reindirizzato sulla pagina di
			gestione dei pacchetti.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Modifica di un prodotto.\\
\hline
Goal &
			L’impiegato modifica un prodotto aggiungendo una escursione
			pre-programmata.\\
\hline
Attori partecipanti &
			Sig. Brighi: impiegato dell'azienda.\\
\hline
Condizione iniziale &
			Grazie a lavori durati diversi anni, è ora possibile passare attraverso una grotta artificiale appena
			inaugurata ed arrivare dentro una splendida valle precedentemente irraggiungibile, con una cascata
			di acque termali di diversi metri, in una scenografia unica al mondo in
			delle isole del pacifico asiatico. Bisogna assolutamente permettere ai clienti un’escursione in un tale paradiso!\\
\hline
Eventi &
			In Agenzia arriva la notizia di una nuova escursione disponibile da fornire ai clienti all’interno dei pacchetti:
			una camminata all’interno di un sistema di grotte artificiali fino a una splendida valle con delle acque termali.
			Il sig. Brighi, già loggato nel sistema, si fa carico di modificare il prodotto interessato da questa novità,
			in quanto precedentemente era solo una visita delle foreste di quelle zone. Quindi dopo averlo cercato  %reso
			%offline per la modifica,
			lo apre e clicca sul tasto modifica. Poichè nessuno sta modificando lo stesso prodotto,
			l’operazione inizia. Il signor Brighi modifica il nome del prodotto, la descrizione e la località e modifica
			il prezzo del pacchetto. Inoltre aggiunge un giorno alla durata. Infine salva tutte le modifiche apportate
			e lo rende nuovamente disponibile al pubblico, che ora può costumizzarlo a piacimento e prenotarlo.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Eliminazione di un prodotto.\\
\hline
Goal &
			L’impiegato elimina un prodotto.\\
\hline
Attori partecipanti &
			Sig. Brighi: impiegato dell'azienda.\\
\hline
Condizione iniziale &
			Il signor Kyong, gestore dell’hotel ChiWang a Singapore, ha deciso di
			chiudere, per cui non è più possibile pernottarci.\\
\hline
Eventi &
			Il sig. Brighi, già loggato dentro il sistema, apre la pagina di gestione dei prodotti. Dall’elenco dei prodotti,
			utilizzando il form di ricerca, restringe l’elenco dei risultati mostrati. Quindi clicca sul pulsante per
			l’eliminazione del prodotto. Un messaggio compare segnalando che il prodotto è attualmente fornito in diversi
			pacchetti, mostrando quali pacchetti ne fanno uso. Il sig. Brighi procede dunque a modificare i suddetti pacchetti,
			quindi ripetendo le operazioni di prima elimina il prodotto, questa volta con successo. Per gli utenti che
			già avevano terminato la prenotazioni per tali pacchetti le cose non cambiano, infatti il signor Kyong ha
			segnalato con largo anticipo la chiusura, e starà aperto finchè le prenotazioni già prese non saranno tutte gestite.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Controllo delle prenotazioni.\\
\hline
Goal &
			Controllare quanti e quali utenti hanno eseguito una prenotazione.\\
\hline
Attori partecipanti &
			C. Azzoni: presidente dell’azienda.\\
\hline
Condizione iniziale &
			Il sig. Azzoni è già loggato con le sue credenziali da impiegato nel
			sistema.\\
\hline
Eventi &
			Il sig. Azzoni apre la pagina per la visualizzazione delle prenotazioni. Qui, dal menu a tendina,
			può scegliere in che ordine mostrare le iscrizioni (per data ultima modifica, per numero di partecipanti, costo, etc..)
			Una volta preso nota di quale pacchetto è meno quotato al momento, torna al	suo lavoro potendo ora usufruire
			di questa informazione per una pianificazione migliore delle proposte.\\
\hline
\end{tabularx}

\vspace*{1 cm}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Navigare tra le prenotazioni.\\
\hline
Goal &
			Navigare tra le prenotazioni e mandare una news letter a un gruppo
			specifico.\\
\hline
Attori partecipanti &
			Daniele: impiegato dell'azienda.\\
\hline
Condizione iniziale &
			Vari clienti hanno prenotato un viaggio con la linea Salsa \& Tango Airlines.
			Daniele, già loggato nel sistema, entra a conoscenza di un problema con la
			suddetta compagnia.\\
\hline
Eventi &
			Daniele è un impiegato dell’agenzia TravelDream, alla pausa caffè legge sul
			Corriere della Pera che a causa della crisi economica del Sud America la
			linea Salsa \& Tango Airlines ha rilasciato un annuncio di sciopero per il
			mese seguente. Allarmato dalla notizia, accede all’applicazione per poter
			avvertire i clienti dell’accaduto. Daniele accede alle prenotazioni
			effettuate dai clienti e le filtra per verificare quanti e quali sono i
			clienti che hanno prenotato un pacchetto viaggio nel mese successivo con
			compagnia aerea Salsa \& Tango, una volta recuperati tutte le mail invia una
			news letter con le avvertenze di rischio sciopero e con le indicazioni per il
			cambiamento di prenotazioni che dovranno essere effettuate dallo stesso utente.
			\\
\hline
\end{tabularx}

\vspace*{1 cm}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% 	UTENTE NON REGISTRATO  %%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paragraph{Utente non registrato}

\noindent\begin{tabularx}{\textwidth}{ |l|X| }
\hline
Nome scenario &
			Invito di un utente esterno.\\
\hline
Goal &
			L'utente esterno, una volta ricevuta una richiesta, vuole prenotare.\\
\hline
Attori partecipanti &
			\shortstack{ Sid: utente esterno non registrato,\\
				Sergio: utente registrato.}\\
\hline
Condizione iniziale &
			Sergio ha mandato una mail di segnalazione a Sid per un pacchetto.
			Sid vuole comprare il pacchetto.\\
\hline
Eventi &
			Sid ha ricevuto una mail di segnalazione viaggio da parte del suo collega
			Sergio con in allegato un messaggio “Visto il tuo lavoro impegnativo nella
			nostra azienda ti propongo questa vacanza di relax”. Sid incuriosito accede al
			link proposto e visualizza il pacchetto con destinazione Montecatini Terme
			“Un viaggio, un sogno”, preso dalla stanchezza decide di prenotare subito
			cliccando su prenota. Non essendo registrato il sito lo indirizzerà alla
			pagina di registrazione, Il ragazzo inserisce i dati personali richiesti e
			conferma la registrazione. Purtroppo si è dimenticato di inserire il nome,
			un campo obbligatorio, così viene reindirizzato nuovamente alla pagina
			di login con parte dei dati già ricompilati, inserisce il dato
			mancante e riconferma l’operazione. Compare un messaggio di successo
			dell’operazione e viene indirizzato alla home del sito. Una volta loggato
			cerca tra i pacchetti Relax quello con nome “Un viaggio, un sogno” consigliato
			dal collega lo aggiunge al carrello e prosegue con la prenotazione.
			\\
\hline
\end{tabularx}


\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%	USE CASES	%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Use Cases}

\paragraph{Utente Registrato}\vspace*{-0.5 cm}
\hrulefill\\

\begin{figure}[H]
\begin{tikzpicture}

\umlactor[x=-2, y=0]{Utente registrato}
\umlusecase[name=login, x=-1, y=7, fill=lightgray!30, width=1.5cm]{Login}
\umlusecase[name=viewfrnd, x=1, y=5, fill=lightgray!30, width=1.5cm]{Visualizza lista amici}
\umlusecase[name=filtraamico, x=1, y=8, fill=lightgray!30, width=1.5cm]{Filtra amico}
\umlusecase[name=profamico, x=5, y=5, fill=lightgray!30, width=1.5cm]{Visualizza profilo amico}
\umlusecase[name=giftlistamico, x=4, y=7.5, fill=lightgray!30, width=1.5cm]{Visualizza Gift-list amico}
\umlusecase[name=dettapacch, x=8, y=7.5, fill=lightgray!30, width=1.5cm]{Dettagli pacchetto}
\umlusecase[name=compra, x=13, y=7.5, fill=lightgray!30, width=1.5cm]{Compra pacchetto}
\umlusecase[name=travels, x=11, y=4, fill=lightgray!30, width=1.5cm]{Visualizza viaggi effettuati}
\umlusecase[name=profilo, x=3, y=3, fill=lightgray!30, width=1cm]{Profilo}
\umlusecase[name=giftlist, x=8, y=2, fill=lightgray!30, width=1.5cm]{Gift-list}
\umlusecase[name=cancpack, x=13, y=2, fill=lightgray!30, width=1.5cm]{cancella pacchetto}
\umlusecase[name=viewcheck, x=4, y=0.5, fill=lightgray!30, width=1.5cm]{visualizza carrello}
\umlusecase[name=cancpack2, x=10, y=0, fill=lightgray!30, width=1.5cm]{Elimina pacchetto}
\umlusecase[name=prenpack, x=6, y=-2, fill=lightgray!30, width=1.5cm]{Conferma acquisti}
\umlusecase[name=paga, x=11, y=-1, fill=lightgray!30, width=1.5cm]{Pagamento}
\umlusecase[name=viewpacks, x=2, y=-2, fill=lightgray!30,width=1.5cm]{Visualizza
pacchetti}
\umlusecase[name=filtrapacks, x=2, y=-4, fill=lightgray!30, width=1.5cm]{Filtra
pacchetti}
\umlusecase[name=viewdett, x=8, y=-4, fill=lightgray!30, width=1.5cm]{Visualizza dettaglio pacchetto}
\umlusecase[name=addcheck, x=11.5, y=-2.5, fill=lightgray!30,
width=1.5cm]{Aggiungi al carrello} \umlusecase[name=addgift, x=11.5, y=-4, fill=lightgray!30, width=1.5cm]{Aggiungi
alla gift-list}
\umlinclude{prenpack}{paga}
\umlextend{dettapacch}{giftlistamico}
\umlextend{compra}{dettapacch}
\umlextend{filtrapacks}{viewpacks}
\umlextend{filtraamico}{viewfrnd}
\umlextend{profamico}{viewfrnd}
\umlextend{travels}{profamico}
\umlextend{travels}{profilo}
\umlextend{giftlistamico}{profamico}
\umlextend{giftlist}{profilo}
\umlextend{viewcheck}{profilo}
\umlextend{cancpack}{giftlist}
\umlextend{cancpack2}{viewcheck}
\umlextend{prenpack}{viewcheck}
\umlextend{viewdett}{viewpacks}
\umlextend{addcheck}{viewdett}
\umlextend{addgift}{viewdett}
\umlassoc{login}{Utente registrato}
\umlassoc{viewfrnd}{Utente registrato}
\umlassoc{profilo}{Utente registrato}
\umlassoc{viewpacks}{Utente registrato}

\end{tikzpicture}
\end{figure}
\newpage
\noindent\chapter{1. Accesso}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
			L'utente registrato effettua l'accesso al sistema \\

Goal &
			L'utente effettuta l'accesso al sistema e può utilizzare l'applicazione \\

\rowcolor{light-gray}
Attori partecipanti &
			Utente registrato \\

Condizione d'entrata &
			L'utente registrato si trova sulla homepage\\
\rowcolor{light-gray}
Condizione d'uscita &
			Il cliente effettua con successo l’accesso ed è nella sua pagina
			personale\\

Flusso d'eventi &
			\begin{enumerate}
				\item L'utente registrato inserisce la sua mail e password nel form di
					login nella homepage e clicca su ``Accedi''
				\item Il sistema verifica le credenziali
				\item Se le credenziali sono corrette l’applicazione carica la pagina
					personale del cliente
			\end{enumerate}
			\\
\rowcolor{light-gray}
Eccezioni &
			\begin{enumerate}
  				\item 	Credenziali non valide
			\end{enumerate}\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
	\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[6]{sys}{Sistema}
		\begin{call}{usr}{Click su ``Accedi'' (eMail, password)}{sys}{Generazione pagina personale}
			\begin{callself}{sys}{Verifica credenziali(eMail, password)}{Esito verifica}
			\end{callself}
		\end{call}
	\end{sequencediagram}\\

\noindent\dotfill\\
\noindent\chapter{2. Ricerca tra i pacchetti}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente registrato cerca tra i pacchetti \\

Goal &
			L'utente effettua una ricerca tra i pacchetti selezionando le voci di suo
			interesse \\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato \\

Condizione d'entrata &
						 L'utente registrato ha effettuato l'accesso e si trova nella sua pagina
						 personale\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il cliente ha effettuato una ricerca e il sistema risponde con una lista di risultati\\

Flusso d'eventi &  
					\begin{enumerate}
					  \item L'utente registrato clicca sul bottone di visualizzazione dei
					  pacchetti
					  \item Il sistema carica la pagina dei pacchetti viaggio
					  \item Il cliente seleziona dai menu a tendina le voci che gli interessano e inserisce
					   le parole chiave nella textbox di ricerca
					  \item Il sistema ricerca nel database i prodotti che corrispondono alle
					  richieste immesse dall’utente
					  \item Viene generata una lista dei risultati a disposizione del cliente
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[6]{sys}{Sistema}
		\begin{call}{usr}{Visualizza pacchetti}{sys}{Generazione elenco dei pacchetti}
		\end{call}
		\begin{call}{usr}{Filtra(keywords[])}{sys}{Visualizzazione dei risultati della ricerca}
			\begin{callself}{sys}{Ricerca del database(keywords[])}{Risultati della ricerca}
			\end{callself}
		\end{call}
	\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{3. Acquisto e personalizzazione di un pacchetto}\label{3.
Acquisto e personalizzazione di un pacchetto}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente registrato acquista e personalizza un pacchetto viaggio \\

Goal &
			L'utente effettua una prenotazione e il pacchetto viaggio acquistato viene aggiunto al suo storico acquisti \\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato \\

Condizione d'entrata &
						 L'utente clicca su un pacchetto viaggio\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il cliente conferma l'acquisto e il pacchetto viene aggiunto al
						suo storico\\

Flusso d'eventi &  
					\begin{enumerate}
					  \item L'utente registrato sceglie dall'elenco un pacchetto di suo
					  interesse cliccandovi sopra
					  \item Il sistema carica la pagina del pacchetto scelto visualizzandone i dettagli
					  \item Il cliente clicca sul bottone ``Personalizza''
					  \item Il sistema mostra le parti personalizzabili del pacchetto
					  \item Il cliente, selezionando dai menu, personalizza il pacchetto e, infine, clicca su ``Aggiungi a carrello''
					  \item Il sistema salva il pacchetto personalizzato nel carrello e carica la pagina dei pacchetti.
					  \item L'utente clicca su ``visualizza carrello''
					  \item Il sistema visualizza la pagina del carrello
					  \item L'utente conferma la prenotazione e il pagamento
					  \item Il sistema salva nello storico dell'utente il pacchetto appena
					  acquistato
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	\begin{enumerate}
  				\item I campi compilati di personalizzazione contengono errori (le date non rispettano i vincoli, ...)
			\end{enumerate}\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[6.5]{sys}{Sistema}
		\begin{call}{usr}{Click su pacchetto(id\_pacchetto)}{sys}{Caricamento dettagli del pacchetto}
		\end{call}
		\begin{call}{usr}{Personalizza(id\_pacchetto)}{sys}{Mostra personalizzazioni possibili}
		\end{call}
		\begin{callself}{usr}{Modifica il pacchetto}{}
			\end{callself}
		\begin{call}{usr}{Aggiungi pacchetto a carrello(id\_pachetto,
		modifiche[])}{sys}{Caricamento pagina pacchetti}
			\begin{callself}{sys}{Salva personalizzazioni(id\_utente, id\_pacchetto)}{}
			\end{callself}
		\end{call}
		\begin{call}
			{usr}{Richiesta visualizzazione carrello(id\_utente)}
			{sys}{visualizza carrello utente}
		\end{call}
		\begin{call}{usr}{Confema prenotazioni(id\_utente, id\_pacchetto)}{sys}{}
			\begin{callself}{sys}{Aggiorna storico utente(id\_utente,
			id\_pacchetto)}{}
			\end{callself}
		\end{call}
	\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{4. Invio di un invito agli amici}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente registrato prenota e invita altri utenti\\
				
Goal &
			L'utente effettua una prenotazione e invia un invito di partecipazione al viaggio ad altri utenti\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato \\
						
Condizione d'entrata &
						 L'utente clicca su un pacchetto viaggio\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema invia le mail agli utenti inviati\\
						
Flusso d'eventi &  
					\begin{enumerate}
					  \item L'utente registrato sceglie un pacchetto e lo inserisce nel carrello secondo le
					  modalità descritte nello Use Case \ref{3. Acquisto e personalizzazione di
					  un pacchetto}
					  \item Al momento di confermare il pacchetto il cliente decide di invitare altri utenti al viaggio cliccando su ``Invita Amici''
					  \item L'applicazione carica la pagina con la textbox per l’inserimento
					  delle mail a cui recapitare l'invito
					  \item Il cliente inserisce le mail degli amici nella textbox e clicca su ``Invita''
					  \item Il sistema spedisce gli inviti e salva il pacchetto nella lista di viaggi in attesa di conferma, aspettando che gli utenti invitati e il cliente confermino il pagamento
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\newgeometry{left=0.6in}
\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[5]{sys}{Sistema}
		\newinst[5]{frnd}{Utenti Invitati}
		\begin{sdblock}{Prenotazione}{Sequence Diagram 3: Acquisto pacchetto}
			\begin{call}{usr}{scelta e prenotazione}{sys}{Pagina di conferma}
			\end{call}
		\end{sdblock}
		\begin{call}{usr}{``Invita Amici''}{sys}{Form di inserimento eMails}
		\end{call}
		\begin{call}{usr}{Invita(eMails[])}{sys}{Messaggio di conferma}
			\begin{call}{sys}{Invio Inviti}{frnd}{}
			\end{call}
			\begin{callself}{sys}{Aggiornamento lista in attesa(id\_utente, id\_pacchetto)}{}
			\end{callself}
		\end{call}
	\end{sequencediagram}

\restoregeometry

\noindent\dotfill\\
\noindent\chapter{5. Aggiunta di un pacchetto alla propria Gift-list}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente registrato inserisce un prodotto relativo ad un pacchetto nella propria gift-list\\
				
Goal &
			L'utente seleziona un prodotto e lo aggiunge alla gift-list personale\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato \\
						
Condizione d'entrata &
						 L'utente si trova nella pagina di visualizzazione pacchetti\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema inserisce nella gift-list il prodotto selezionato relativo al pacchetto\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'utente registrato seleziona un pacchetto di suo interesse
					  dall'elenco visualizzato cliccandoci sopra
					 \item Il sistema carica la pagina del pacchetto scelto visualizzandone i dettagli
					 \item Il cliente clicca sul bottone di inserimento prodotto nella gift list.
					 \item Il sistema salva il prodotto relativo al pacchetto
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{usr}{Utente}
	\newinst[7]{sys}{Sistema}
	\begin{call}{usr}{selezionaPacchetto(idPacchetto)}{sys}{visualizza dettagli Pacchetto}
	\end{call}
	\begin{call}{usr}{aggiungi prodotto in gift-list (idPacc,
	idUtente,idProd)}{sys}{messaggio successo operazione}
		\begin{callself}{sys}{Salva prodotto e relativo pacchetto in gift-list}{}
		\end{callself}
	\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{6. Un utente regala un pacchetto ad un amico presente nella gift list dello stesso}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente registrato regala ad un amico un prodotto\\
				
Goal &
			L'utente registrato visualizza un pacchetto presente nella Gift-list di un
			amico e gli regala un prodotto richiesto\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato; Amico con Gift-list \\
						
Condizione d'entrata &
						 L'utente si trova nella home\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema invia una mail all'amico interessato\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'utente registrato accede all'elenco degli amici filtrando il nome
					 nel campo apposito e cliccando il tasto di ricerca
					 \item Il sistema fornisce l'elenco degli amici filtrati
					 \item L'utente registrato cerca l'amico tra l'elenco e clicca sul suo nome
					 per visualizzare il profilo
					 \item Il sistema visualizza la pagina personale dell'amico selezionato
					 dall'utente
					 \item L'utente registrato seleziona il bottone ``visualizza gift-list''
					 \item Il sistema visualizza tutti i pacchetti presenti nella gift-list
					 dell'amico selezionato in precedenza
					 \item L'utente visualizza tutti i pacchetti e ne seleziona uno cliccandoci
					 sopra
					 \item Il sistema visualizza i dettagli del pacchetto selezionato
					 \item L'utente decide di effettuare la prenotazione di un prodotto richiesto per l'amico e
					 seleziona il bottone ``Prenota''
					 \item L'utente inserisce i dati della prenotazione e clicca il tasto di
					 conferma
					 \item Il sistema memorizza la prenotazione del prodotto, elimina della gift-list il
					 pacchetto prenotato e lo inserisce nel carrello del cliente
					 \item Il sistema invia una mail all’amico proprietario della gift-list per
					 informarlo dell’avvenuta prenotazione regalo
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{usr}{Utente}
	\newinst[6]{sys}{Sistema}
	\newinst[3]{friend}{Amico con gift-list}
	\begin{call}{usr}{richiesta elenco amici (name)}{sys}{visualizza elenco amici}
	\end{call}
	\begin{call}{usr}{seleziona amico(idAmico)}{sys}{visualizza dettagli amico}
	\end{call}
	\begin{call}{usr}{richiesta gift list amico (idAmico)}{sys}{visualizza pacchetti gift list amico}
	\end{call}
	\begin{call}{usr}{selezione pacchetto(idPAcchetto)}{sys}{visualizza dettagli pacchetto}
	\end{call}
	\begin{call}{usr}{prenotaProdottoPerAmico(idPAcchetto,idAmico)}{sys}{risultato
	operazioni}
		\begin{callself}{sys}{salva in carrello}{elimina pacchetto da gift-list}
		\end{callself}
	\end{call}
	\begin{call}{sys}{invia mail prenotazone}{friend}{}
	\end{call}
\end{sequencediagram}


\noindent\dotfill\\
\noindent\chapter{7. Un utente elimina un pacchetto dalla propria gift-list}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente registrato elimina un pacchetto dalla propria gift-list\\
				
Goal &
			L'utente seleziona un pacchetto presente nella gift-list personale e lo elimina\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato\\
						
Condizione d'entrata &
						 L’utente si trova nella pagina personale\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema inserisce elimina dalla gift-list un pacchetto\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'utente registrato clicca sul bottone ``gift-list Personale''
					 \item Il sistema carica la pagina della gift-list e visualizza tutti i
					 pacchetti scelti in precedenza dall'utente
					 \item L'utente seleziona un pacchetto per visualizzare i dettagli
					 \item Il sistema visualizza i dettagli del pacchetto selezionato
					 \item L'utente clicca sul bottone ``elimina'', dopo la visualizzazione di un messaggio di conferma, 
					 clicca il bottone ``ok'' per eliminare defintivamente il pacchetto dalla sua
					 gift-list
					 \item Il sistema elimina definitivamente il pacchetto dalla gift-list
					  e avvisa l'utente registrato dell'avvenuta cancellazione
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{usr}{Utente}
	\newinst[6]{sys}{Sistema}
	\begin{call}
		{usr}{accedi a gift-list}{sys}{visualizza pacchetti gift-list}
	\end{call}
	\begin{call}
		{usr}{selezione pacchetto (idPacchetto)}{sys}{visualizza dettagli pacchetto}
	\end{call}
	\begin{call}
		{usr}{elimina pacchetto(idPAcchetto)}{sys}{messaggio di successo}
		\begin{call}
			{sys}{conferma di eliminazione}{usr}{risposta alla conferma}
		\end{call}
	\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{8. Un utente accetta un pacchetto al quale è stato invitato}

\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
\label{AccettaInvito}
Descrizione &
				L'utente visualizza e accetta un pacchetto al quale è stato invitato\\
				
Goal &
			Viene confermato l'acquisto di pacchetto ricevuto come invito\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente registrato\\
						
Condizione d'entrata &
						 L'utente si trova nell'homepage\\
\rowcolor{light-gray}
Condizione d'uscita &
						Viene aggiornato lo storico dei viaggi acquistati\\
						
Flusso d'eventi &  
					\begin{enumerate}
						 \item L'utente effettua l'accesso al sistema che gli carica la sua pagina
					 personale
					 \item L'utente clicca sul bottone ``Inviti''
					 \item Il sistema carica la pagina degli inviti
					 \item L'utente clicca sul pacchetto al quale è stato invitato
					 \item Il sistema mostra la pagina di conferma
					 \item Il cliente clicca su ``Aggiungi a carrello''
					 \item L'applicazione aggiunge il pacchetto al carrello per poi procedere con la prenotazione
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[7]{sys}{Sistema}
		\begin{callself}
			{usr}{Inserimeto mail e password}{}
		\end{callself}
		\begin{call}{usr}{LogIn(eMail,Password)}{sys}{Pagina Personale}
		\end{call}
		\begin{call}{usr}{Mostra Inviti()}{sys}{Pagina inviti}
		\end{call}
		\begin{call}{usr}{Click su pacchetto(idPacchetto)}{sys}{Dettagli pacchetto}
		\end{call}
		\begin{call}{usr}{Accetta invito(idUtente, idPacchetto)}{sys}{pagina di
		conferma}
		\end{call}
		\begin{call}{usr}{Conferma(idUtente, idPacchetto)}{sys}{Messaggio di successo}
			\begin{callself}{sys}{Salvataggio prenotazione in carrello}{}
			\end{callself}
		\end{call}
\end{sequencediagram}

\newpage
\paragraph{Impiegato}\vspace*{-0.5 cm}
\hrulefill\\

\begin{figure}[H]
\newgeometry{left=0.5in}
\begin{tikzpicture}

\umlactor[x=-2, y=0]{Impiegato}
\umlusecase[name=login, x=-1, y=7, fill=lightgray!30, width=1.5cm]{Login}
\umlusecase[name=addprod, x=2, y=6.5, fill=lightgray!30, width=1.5cm]{Aggiungi prodotto}
\umlusecase[name=addHot, x=6.5, y=8, fill=lightgray!30, width=1.5cm]{Aggiungi Hotel}
\umlusecase[name=addFly, x=6.5, y=6.5, fill=lightgray!30, width=1.5cm]{Aggiungi volo}
\umlusecase[name=addExc, x=6.5, y=5, fill=lightgray!30, width=1.5cm]{Aggiungi escursione}
\umlusecase[name=edit, x=11, y=4, fill=lightgray!30, width=1.5cm]{Modifica}
\umlusecase[name=showprod, x=3, y=3, fill=lightgray!30, width=1cm]{Visualizza prodotti}
\umlusecase[name=dettprod, x=7, y=3, fill=lightgray!30, width=1.5cm]{Visualizza dettaglio prodotto}
\umlusecase[name=canc, x=11, y=2, fill=lightgray!30, width=1.5cm]{cancella}
\umlusecase[name=addpack, x=4, y=0, fill=lightgray!30, width=1.5cm]{Aggiungi pacchetto}
\umlusecase[name=selHotel, x=9, y=1, fill=lightgray!30, width=1.5cm]{Seleziona Hotel}
\umlusecase[name=selVolo, x=9, y=-0.5, fill=lightgray!30, width=1.5cm]{Seleziona Volo}
\umlusecase[name=selTour, x=9, y=-2, fill=lightgray!30, width=1.5cm]{Seleziona Tour}
\umlusecase[name=viewpacks, x=2, y=-3, fill=lightgray!30, width=1.5cm]{Visualizza pacchetti}
\umlusecase[name=viewdett, x=7, y=-4, fill=lightgray!30, width=1.5cm]{Dettagli pacchetto}
\umlusecase[name=delP, x=11.5, y=-3.5, fill=lightgray!30, width=1.5cm]{Elimina}
\umlusecase[name=editP, x=11.5, y=-4.5, fill=lightgray!30, width=1.5cm]{Modifica}

\umlextend{addHot}{addprod}
\umlextend{addFly}{addprod}
\umlextend{addExc}{addprod}
\umlextend{dettprod}{showprod}
\umlextend{canc}{dettprod}
\umlextend{edit}{dettprod}
\umlextend{delP}{viewdett}
\umlextend{editP}{viewdett}
\umlextend{viewdett}{viewpacks}
\umlinclude{addpack}{selHotel}
\umlinclude{addpack}{selVolo}
\umlinclude{addpack}{selTour}
\umlassoc{login}{Impiegato}
\umlassoc{addprod}{Impiegato}
\umlassoc{showprod}{Impiegato}
\umlassoc{addpack}{Impiegato}
\umlassoc{viewpacks}{Impiegato}

\end{tikzpicture}
\end{figure}
\noindent\chapter{9. Creazione di un prodotto}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'impiegato dell’azienda inserisce un nuovo prodotto nel sistema\\
				
Goal &
			L'impiegato dell’azienda crea un nuovo prodotto e lo inserisce nel sistema\\
\rowcolor{light-gray}
Attori partecipanti &
						Impiegato\\
						
Condizione d'entrata &
						 L'impiegato si trova nella home page\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema inserisce il prodotto nell'elenco nel'elenco corrispondente\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'impegato clicca sul bottone ``inserisci nuovo prodotto''
					 \item Il sistema visualizza la pagina per l'inserimento dei dati
					 \item L'Impiegato inserisce i dati richiesti negli appositi campi e
					 seleziona il tasto ``inserisci''
					 \item Il sistema legge i dati inseriti dagli utenti e li salva nel
					 database
					 \item Il sistema conferma l'inserimento del prodotto
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{wrk}{Impiegato}
	\newinst[5]{sys}{Sistema}
	\begin{call}
		{wrk}{Richiesta aggiunta nuovo prodotto}{sys}{Visualizza form inserimento
		dati}
	\end{call}
	\begin{callself}{wrk}{Inserisce dati}{}
			\end{callself}
	\begin{call}
		{wrk}{Invia dati per inserimento}{sys}{Messaggio successo}
		\begin{callself}
			{sys}{Salva prodotto}{}
		\end{callself}
	\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{10. Creazione di un pacchetto.}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'impiegato dell'azienda inserisce un nuovo pacchetto nel sistema\\
				
Goal &
			L'impiegato dell’azienda crea un nuovo pacchetto e lo inserisce nel
			sistema\\
\rowcolor{light-gray}
Attori partecipanti &
						Impiegato\\
						
Condizione d'entrata &
						 L'impiegato si trova nella home page\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema inserisce un nuovo pacchetto nell'elenco\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'impegato clicca sul bottone ``inserisci pacchetto''
					 \item Il sistema visualizza la pagina per l'inserimento dei dati
					 \item L'impiegato immette il nome del pacchetto, la descrizione 
					 dello stesso e la città di destinazione nei campi appositi
					 \item L'impegato clicca sul bottone ``Aggiunta pernottamento''
					 \item Il sistema visualizza un elenco dei possibili hotel nello Stato
					 della città scritta in precedenza
					 \item L'impiegato seleziona l'hotel interessato e inserisce la data di
					 check-in e check-out scelta in precedenza e conferma l'hotel
					 \item Successivamente l'impiegato clicca sul bottone ``inserisci tour
					 pre-organizzato''
					 \item  Il sistema visualizza tutti i viaggi pre-organizzati relativi allo
					 stato di appartenenza della città scritta in precedenza
					 \item L'impiegato seleziona il tour interessato e seleziona il tasto
					 ``Conferma Pacchetto''
					 \item Il sistema crea un nuovo pacchetto salvando tutti i dati immessi in
					 precedenza dall'impegato
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
		\newthread[light-blue]{wrk}{Impiegato}
		\newinst[5]{sys}{Sistema}
		\begin{call}
			{wrk}{richiesta inserimento nuovo prodotto}
			{sys}{visualizza inserimento dati}
		\end{call}
		\begin{callself}
			{wrk}{inserimento nomePacchetto,Descrizione,Città destinazione}{}
		\end{callself}
		\begin{call}
			{wrk}{scegli hotel()}{sys}{visualizza lista hotel}
		\end{call}
		\begin{callself}
			{wrk}{selezione hotel e inserimento check in check out}{}
		\end{callself}
		\begin{call}
			{wrk}{scegli tour pre organizzato}
			{sys}{visualizza lista tour}
		\end{call}
		\begin{callself}
			{wrk}{selezione tour}{}
		\end{callself}
		\begin{call}
			{wrk}{Conferma inserimento pacchetto[]}
				{sys}{messaggio successo}
			\begin{callself}
				{sys}{salva dati pacchetto}{}
			\end{callself}
		
		\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{11. Modifica di un prodotto}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'impiegato dell'agenzia modifica un prodotto\\
				
Goal &
			L'impiegato dell'agenzia modifica un prodotto e salva i cambiamenti\\
\rowcolor{light-gray}
Attori partecipanti &
						Impiegato\\
						
Condizione d'entrata &
						L'impiegato si trova nella pagina dei prodotti\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema apporta all’elenco le modifiche selezionate\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'Impiegato attraverso un apposito campo filtra il nome del prodotto cercato
					 \item Il sistema visualizza i prodotti filtrati
					 \item L'impiegato seleziona il prodotto interessato
					 \item Il sistema visualizza le specifiche del pacchetto con possibilità di modifica
					 \item L'impiegato modifica alcuni campi del prodotto e clicca sul bottone
					 ``conferma modifiche''
					 \item Il sistema legge dai campi appositi le modifiche e le salva
					 \item Il sistema visualizza un messaggio di corretta modifica dei dati
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{wrk}{Impiegato}
	\newinst[6]{sys}{Sistema}
	\begin{call}
		{wrk}{applica filtro prodotto}
		{sys}{visualizza lista prodotti filtrati}
	\end{call}
	\begin{call}
		{wrk}{selezione prodotto(idPRodotto)}
		{sys}{visualizza dettagli pacchetto}
	\end{call}
	\begin{callself}
		{wrk}{modifica dati}{}
	\end{callself}
	\begin{call}
		{wrk}{Conferma modifica dati[]}
		{sys}{messaggio successo}
		\begin{callself}
			{sys}{applica la modifica dati}{}
		\end{callself}
	\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{12. Modifica di un pacchetto}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'impiegato dell'agenzia modifica un pacchetto già presente nell'elenco.\\
				
Goal &
			L'impiegato dell’azienda modifica un pacchetto\\
\rowcolor{light-gray}
Attori partecipanti &
						Impiegato\\
						
Condizione d'entrata &
						L'impiegato si trova nella pagina dei pacchetti\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema apporta le modifiche ad un pacchetto\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'impiegato filtra i pacchetti intressati tramite nome o
					 destinazione
					 \item Il sistema visualizza i pacchetti filtrati
					 \item L'impiegato seleziona il pacchetto interessato
					 \item Il sistema visualizza i dettagli, modificabili, del pacchetto
					 \item L'utente apporta le modifiche richieste e clicca sul tasto di
					 conferma
					 \item Il sistema apporta le modifiche interessate
					 \item Il sistema visualizza un messaggio di modifica avvenuta all'utente
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{wrk}{Impiegato}
	\newinst[6]{sys}{Sistema}
	\begin{call}
		{wrk}{applica filtro pacchetto}
		{sys}{visualizza pacchetti filtrati}
	\end{call}
	\begin{call}
		{wrk}{selezione prodotto(idProdotto)}
		{sys}{visualizza dettagli pacchetto}
	\end{call}
	\begin{callself}
		{wrk}{modifica dati}{}
	\end{callself}
	\begin{call}
		{wrk}{Conferma modifica dati[]}
		{sys}{messaggio successo}
		\begin{callself}
			{sys}{applica la modifica dati}{}
		\end{callself}
	\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{13. Modifica della visibilità pubblica di un pacchetto}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'impiegato modifica la visibilità di un pacchetto, se è visibile al pubblico lo rende invisibile e viceversa\\
				
Goal &
			Viene cambiata la visibilità al pubblico di un pacchetto\\
\rowcolor{light-gray}
Attori partecipanti &
						Impiegato\\
						
Condizione d'entrata &
						L'impiegato si trova nella pagina dei pacchetti\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema apporta le modifiche ad un pacchetto\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'impiegato filtra i pacchetti intressati tramite nome o
					 destinazione
					 \item Il sistema visualizza i pacchetti filtrati
					 \item L'impiegato seleziona il pacchetto di interesse per verificare i
					 dettagli
					 \item Il sistema visualizza la pagina del pacchetto
					 \item L'impiegato spunta il check di pubblicazione e preme invio per la
					 conferma
					 \item Il sistema apporta la modifica richiesta
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	---\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{wrk}{Impiegato}
	\newinst[6]{sys}{Sistema}
		\begin{call}
			{wrk}{applica filtro pacchetto}
			{sys}{visualizza pacchetti filtrati}
		\end{call}
		\begin{call}
			{wrk}{selezione prodotto(idPRodotto)}
			{sys}{visualizza dettagli pacchetto}
		\end{call}
		\begin{callself}
			{wrk}{spunta pubblicazione}{}
		\end{callself}
		\begin{call}
			{wrk}{Conferma modifica pubblicazione[]}
			{sys}{messaggio successo}
			\begin{callself}
				{sys}{applica la modifica della pubblicazione}{}
			\end{callself}
		\end{call}
\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{14. Rimozione di un pacchetto}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'impiegato dell'agenzia rimuove un pacchetto dall'elenco\\
Goal &
			Viene rimosso un pacchetto dalla lista\\
\rowcolor{light-gray}
Attori partecipanti &
						Impiegato\\
						
Condizione d'entrata &
						L'impiegato si trova nella pagina dei pacchetti\\
\rowcolor{light-gray}
Condizione d'uscita &
						Il sistema elimina un pacchetto\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'impiegato filtra i pacchetti intressati tramite nome o
					 destinazione
					 \item Il sistema visualizza i pacchetti filtrati
					 \item L'impiegato seleziona il pacchetto di interesse per verificare la
					 pubblicazione
					 \item Il sistema fornisce i dettagli all'utente
					 \item L'impiegato spunta la check di pubblicazione nel caso il pacchetto sia già 
					 online e salva la modifica, altrimenti passa direttamente al punto
					 \ref{canc}
					 \item Il sistema salva la modifica di pubblicazione
					 \item \label{canc}L'impiegato clicca sul tasto di rimozione del pacchetto
					 \item Il sistema verifica che il pacchetto non sia pubblicato e lo elimina
					 dall’elenco visualizzando un messaggio di successo all’utente
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	\begin{enumerate}
				\item Impossibile eliminare il pacchetto in quanto è ancora online a
  				disposizione dei clienti
  			\end{enumerate}\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
	\newthread[light-blue]{wrk}{Impiegato}
	\newinst[6]{sys}{Sistema}
	\begin{call}
		{wrk}{applica filtro pacchetto}
		{sys}{visualizza pacchetti filtrati}
	\end{call}
	\begin{call}
		{wrk}{selezione prodotto(idPRodotto)}
		{sys}{visualizza dettagli pacchetto}
	\end{call}
	\begin{callself}
		{wrk}{visualizza pacchetto pubblicato}{}
	\end{callself}
	\begin{sdblock}{If online}{pubblicazione online}
		\begin{callself}
			{wrk}{Spunta check pubblicazione}{}
		\end{callself}
			\begin{call}
					{wrk}{conferma la modifica}
					{sys}{messaggio di successo}
					\begin{callself}
						{sys}{salva modifica pubblicazione}{}
					\end{callself}
			\end{call}
	\end{sdblock}
	\begin{sdblock}{If offline}{pacchetto offline}
		\begin{call}
			{wrk}{elimina pacchetto(idPacchetto)}
			{sys}{messaggio successo}
			\begin{call}
				{sys}{messaggio di conferma}
				{wrk}{conferma eliminazione}
			\end{call}
			\begin{callself}
				{sys}{Elimina pacchetto}{}
			\end{callself}
		\end{call}
	\end{sdblock}
\end{sequencediagram}

\newpage
\paragraph{Utente non registrato}\vspace*{-0.5 cm}
\hrulefill\\
\begin{figure}[H]
\begin{tikzpicture}

\umlactor[y=0]{Utente non registrato}

\umlusecase[name=reg, x=3, y=1, fill=lightgray!50, width=1.5cm]{Registrazione}
\umlusecase[name=dati, x=9, y=1, fill=lightgray!50, width=1.5cm]{Inserisci dati personali}
\umlusecase[name=pack, x=3, y=-1, fill=lightgray!50, width=1.5cm]{Visualizza pacchetto}
\umlinclude{reg}{dati}

\umlassoc{reg}{Utente non registrato}
\umlassoc{pack}{Utente non registrato}
\end{tikzpicture}
\end{figure}
\noindent\chapter{15. Registrazione}

\begin{tabularx}{\textwidth}{l m{10cm}}

\rowcolor{light-gray}
\label{logon:Registrazione}
Descrizione &
				L'utente non registrato si registra nel sistema\\
Goal &
			L'utente ottiene l'accesso al sistema e può prenotare i pacchetti viaggio\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente non registrato\\
						
Condizione d'entrata &
						L'utente non registrato si trova sulla homepage\\
\rowcolor{light-gray}
Condizione d'uscita &
						I dati dell'utente, che può ora effettuare l'accesso, sono salvati nel
						database\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'utente non registrato apre l'homepage
					 \item L'utente clicca sul bottone ``Registrati''
					 \item Il sistema carica il form dove inserire i dati personali
					 \item L'utente completa il form e clicca ``Avanti''
					 \item Il sistema mostra il riscontro positivo dell'operazione
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	\begin{enumerate}
				\item eMail già presente nel sistema
				\item I dati inseriti non rispettano i vincoli del form (le password non
				coincidono, dati obbligatori non inseriti)
			\end{enumerate}\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[5]{sys}{Sistema}
		\begin{call}{usr}{Click su link}{sys}{Generazione Homepage}
		\end{call}
		\begin{call}{usr}{Click su ``Registrazione''}{sys}{Visualizza form di registrazione}
		\end{call}
		\begin{call}{usr}{Click su ``Avanti'' (eMail, password)}{sys}{Esito della registrazione}
			\begin{callself}{sys}{Controllo di consistenza dei dati inseriti}{Esito controllo}
			\end{callself}
		\end{call}
	\end{sequencediagram}

\noindent\dotfill\\
\noindent\chapter{16. Visione e accettazione di un pacchetto al quale l'utente è
invitato}
\begin{tabularx}{\textwidth}{l m{10cm}}
\rowcolor{light-gray}
Descrizione &
				L'utente visualizza un pacchetto per il quale ha ricevuto un invito e decide di registrarsi\\
Goal &
			L'utente non registrato al sistema prende visione di un pacchetto e dei suoi contenuti
			 e diventa cliente dell'agenzia registrandosi all'applicazione\\
\rowcolor{light-gray}
Attori partecipanti &
						Utente non registrato\\
						
Condizione d'entrata &
						L'utente non registrato clicca sul link di riferimento del pacchetto viaggio\\
\rowcolor{light-gray}
Condizione d'uscita &
						L'utente si è registrato e accetta l'invito\\
						
Flusso d'eventi &  
					\begin{enumerate}
					 \item L'utente non registrato clicca sul link di riferimento dell'invito
					 \item Il sistema carica la pagina del pacchetto oggetto dell'invito
					 \item L'utente clicca sul tasto ``Accetta l'invito''
					 \item Il sistema carica l'homepage col login che comprende anche il link
					 per la registrazione
					 \item Si cade nello Use Case \hyperref[logon:Registrazione]{Registrazione}
					 \item Use Case \hyperref[AccettaInvito]{Un utente accetta un pacchetto al
					 quale è stato invitato}
					\end{enumerate}
					\\
\rowcolor{light-gray}
Eccezioni &	\begin{enumerate}
				\item eMail già presente nel sistema
				\item I dati inseriti non rispettano i vincoli del form (le password non
				coincidono, dati obbligatori non inseriti)
			\end{enumerate}\\
\end{tabularx}
\vspace*{0.25 cm}
%Sequence
\begin{sequencediagram}
		\newthread[light-blue]{usr}{Utente}
		\newinst[7]{sys}{Sistema}
		\begin{call}{usr}{Click sull'invito(id\_invito)}{sys}{Generazione pagina del pacchetto}
		\end{call}
		\begin{call}{usr}{Click su ``Accetta invito''(id\_invito)}{sys}{Caricamento pagina di login con link di registrazione}
		\end{call}
		\begin{sdblock}{Registrazione}{Sequence Diagram 15: Registrazione}
			\begin{call}{usr}{}{sys}{}
			\end{call}
		\end{sdblock}
		\begin{sdblock}{Registrazione}{Sequence Diagram 8: Un utente accetta un
		pacchetto al quale è stato invitato}
			\begin{call}{usr}{}{sys}{}
			\end{call}
		\end{sdblock}
\end{sequencediagram}

\vspace*{1 cm}

\newpage
\section{Appendice}

\subsection{Alloy}
\lstinputlisting[language = alloy, caption = Boolean]{../Alloy/Boolean.als}
\vspace*{1 cm}
\lstinputlisting[language = alloy, caption = Data]{../Alloy/Data.als}
\vspace*{1 cm}
\lstinputlisting[language = alloy, caption = TravelDream Static]{../Alloy/TravelDreamModel.als}


\vspace*{1 cm}
\hspace*{-1.5in}
\includegraphics[scale=0.55]{../Alloy/al1.png}\centering
\newpage
\vspace*{1 cm}
\hspace*{-1in}
\includegraphics[scale=0.55]{../Alloy/al2.png}\centering

\end{document}